#ifndef SESSION_H
#define SESSION_H

#include <QString>
#include <QList>
#include <QDateTime>
#include "common.h"

// 会话类型枚举
enum class SessionType {
    HTTP,
    HTTPS,
    DNS,
    FTP,
    SSH,
    SMTP,
    POP3,
    IMAP,
    OTHER
};

// 获取会话类型的字符串表示
QString sessionTypeToString(SessionType type);

// 会话状态枚举
enum class SessionState {
    ACTIVE,     // 会话正在进行中
    COMPLETED,  // 会话已完成
    ERROR,      // 会话出错
    TIMED_OUT   // 会话超时
};

// 定义应用层协议会话结构体
struct ProtocolSession {
    QString id;                      // 会话唯一标识符
    SessionType type;                // 会话类型
    QString typeString;              // 会话类型的字符串表示
    SessionState state;              // 会话状态
    QDateTime startTime;             // 会话开始时间
    QDateTime endTime;               // 会话结束时间 (如果已完成)
    QString clientAddress;           // 客户端地址
    QString serverAddress;           // 服务器地址
    int clientPort;                  // 客户端端口
    int serverPort;                  // 服务器端口
    QList<int> packetIndices;        // 与会话相关的数据包索引列表
    long long totalBytes;            // 会话总字节数
    int requestCount;                // 请求次数
    int responseCount;               // 响应次数
    QString summary;                 // 会话摘要
    
    // 特定协议的附加信息
    QMap<QString, QString> additionalInfo;  
    
    // 构造函数
    ProtocolSession();
    
    // 析构函数
    ~ProtocolSession();
    
    // 添加数据包到会话
    void addPacket(int packetIndex);
    
    // 更新会话状态
    void updateState(SessionState newState);
    
    // 计算会话持续时间
    qint64 getDurationMs() const;
    
    // 获取会话的可读摘要
    QString getReadableSummary() const;
};

#endif // SESSION_H